using System;
using System.Collections.Generic;
using System.Text;
using Entidades;
using DataAccessArquitectura;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

/*
 * Nombre archivo: cat_vacacionBuilder.cs 
 *
 * Descripcion: Manipulacion de la tabla cat_vacacion, con los metodos de consulta, grabado, actulaizacion
 * y recuperacion de un registro
 *
 * Autor: PLUS-EW
 * Fecha:  23/03/2012 0:52:03
 *
 * Historial
 * ---------------------------------------------------------
 * Autor            Fecha               Modificación
 *
 */

namespace Reglas_Negocio
{
	public class cat_vacacionBuilder
	{
		private const enmTipoBaseDatos mTipoBD = enmTipoBaseDatos.MySQL;

		#region < METODOS PUBLICOS CONSULTA >
		public static DataTable ListarTodos()
		{
			try
			{
				return ListarTodos("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static DataTable ListarTodos(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("*", "cat_vacacion", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static bool Existe(string filtro)
		{
			int numero = 0;
			bool r = false;
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				numero = Convert.ToInt32(bd.EjecutarSelectScalar("COUNT(*)", "cat_vacacion", filtro));
				r = (numero > 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS GRABADO >
		public static bool GrabarViaProcedimiento(cat_vacacion datos)
		{
			int numero = 0;
			bool r = false;
			string filtro = "";
			try
			{
				string strConectionInsert = "INSERT INTO cat_vacacion (nombre_cat_vac) VALUES (?nombre_cat_vac);";
				string strConectionUpdate = "UPDATE cat_vacacion SET nombre_cat_vac = ?nombre_cat_vac WHERE id_cat_vac=?id_cat_vac;";

				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				MySqlParameter psqlId_cat_vac = new MySqlParameter("?id_cat_vac", MySqlDbType.Int32);
				MySqlParameter psqlNombre_cat_vac = new MySqlParameter("?nombre_cat_vac", MySqlDbType.VarChar,100);

				psqlId_cat_vac.Value = datos.Id_cat_vac;
				psqlNombre_cat_vac.Value = datos.Nombre_cat_vac;

				filtro = string.Format("id_cat_vac='{0}'", datos.Id_cat_vac);
				if (!Existe(filtro))
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionInsert
							, psqlId_cat_vac
							, psqlNombre_cat_vac
							);
					MessageBox.Show("Se grabo [cat_vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					numero = bd.EjecutarProcedimientoMySQL(strConectionUpdate
							, psqlId_cat_vac
							, psqlNombre_cat_vac
							);
					MessageBox.Show("Se actualizó [cat_vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				r = (numero < 0);
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static void GrabarViaSql(cat_vacacion datos)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_cat_vac='{0}'", datos.Id_cat_vac);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("cat_vacacion"
						, new CampoValor("nombre_cat_vac", datos.Nombre_cat_vac)
						);
					MessageBox.Show("Se grabo [cat_vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("cat_vacacion", filtro
						, new CampoValor("nombre_cat_vac", datos.Nombre_cat_vac)
						);
					MessageBox.Show("Se actualizó [cat_vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void GrabarViaSql(cat_vacacion datos, bool mensaje)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				string filtro = string.Format("id_cat_vac='{0}'", datos.Id_cat_vac);
				if (!Existe(filtro))
				{
					bd.EjecutarInsert("cat_vacacion"
						, new CampoValor("nombre_cat_vac", datos.Nombre_cat_vac)
						);
					if(mensaje)
						MessageBox.Show("Se grabo [cat_vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
				else
				{
					bd.EjecutarUpdate("cat_vacacion", filtro
						, new CampoValor("nombre_cat_vac", datos.Nombre_cat_vac)
						);
					if(mensaje)
						MessageBox.Show("Se actualizó [cat_vacacion] exitosamente....","Información",MessageBoxButtons.OK,MessageBoxIcon.Information);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS RECUPERACION >
		public static cat_vacacion Recuperar(string filtro)
		{
			cat_vacacion r = new cat_vacacion();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_cat_vac = Convert.ToInt32(ds.Rows[0]["id_cat_vac"]);
					if (ds.Rows[0]["nombre_cat_vac"] != System.DBNull.Value)
						r.Nombre_cat_vac = ds.Rows[0]["nombre_cat_vac"].ToString();
					if (ds.Rows[0]["nombre_cat_vac"] == System.DBNull.Value)
						r.Nombre_cat_vac = "";
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static cat_vacacion Recuperar_sin_joins(string filtro)
		{
			cat_vacacion r = new cat_vacacion();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_cat_vac = Convert.ToInt32(ds.Rows[0]["id_cat_vac"]);
					if (ds.Rows[0]["nombre_cat_vac"] != System.DBNull.Value)
						r.Nombre_cat_vac = ds.Rows[0]["nombre_cat_vac"].ToString();
					if (ds.Rows[0]["nombre_cat_vac"] == System.DBNull.Value)
						r.Nombre_cat_vac = "";
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		public static cat_vacacion RecuperarUltimo(string filtro)
		{
			cat_vacacion r = new cat_vacacion();
			try
			{
				if (Existe(filtro))
				{
					DataTable ds = ListarTodos(filtro);
					r.Id_cat_vac = Convert.ToInt32(ds.Rows[ds.Rows.Count-1]["id_cat_vac"]);
					if (ds.Rows[ds.Rows.Count - 1]["nombre_cat_vac"] != System.DBNull.Value)
						r.Nombre_cat_vac = ds.Rows[ds.Rows.Count - 1]["nombre_cat_vac"].ToString();
					if (ds.Rows[ds.Rows.Count - 1]["nombre_cat_vac"] == System.DBNull.Value)
						r.Nombre_cat_vac = "";
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}
		#endregion

		#region < METODOS PUBLICOS BORRADO >
		public static void Borrar(string filtro)
		{
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				bd.EjecutarDelete("cat_vacacion", filtro);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		public static void BorrarTodos()
		{
			try
			{
				Borrar("");
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}
		#endregion

		#region < METODOS PUBLICOS EXTRAS >
		public static void Listar_Combobox(ComboBox cmbcat_vacacion, string filtro, string nombre_display)
		{
			cmbcat_vacacion.DataSource = ListarTodos(filtro);
			cmbcat_vacacion.DisplayMember = nombre_display;
			cmbcat_vacacion.ValueMember = "id_cat_vac";
		}

		public static DataTable ListarTodos_Alias(string filtro)
		{
			DataTable r = new DataTable();
			try
			{
				ArquitecturaDB bd = new ArquitecturaDB(mTipoBD);
				r = bd.EjecutarSelectDs("id_cat_vac AS id_cat_vac,nombre_cat_vac AS nombre_cat_vac", "cat_vacacion", filtro).Tables[0];
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		public static List<cat_vacacion> ListarTodos_List(string filtro)
		{
			List<cat_vacacion> r = new List<cat_vacacion>();
			try
			{
				DataTable dt = ListarTodos(filtro);
				for (int i = 0; i < dt.Rows.Count; i++)
					r.Add(Recuperar("id_cat_vac="+dt.Rows[i]["id_cat_vac"]));
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

		#region < METODOS PUBLICOS VALIDACION >
		public static cat_vacacion valida_campos_cat_vacacion(Control ctrl_id_cat_vac,TextBox txt_nombre_cat_vac)
		{
			bool r = true;
			cat_vacacion new_cat_vacacion = new cat_vacacion();
			try
			{
				if(ctrl_id_cat_vac.GetType().Equals(typeof(TextBox)))
				{
					TextBox txt_id_cat_vac = (TextBox)ctrl_id_cat_vac;
					if (txt_id_cat_vac.TextLength == 0)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_cat_vac","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					else
					{
						if (Convert.ToInt32(txt_id_cat_vac.Text) == 0)
						{
							r = false;
							MessageBox.Show("Falta ingresar el/la id_cat_vac","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
						}
					}
					if (r)
						new_cat_vacacion.Id_cat_vac = Convert.ToInt32(txt_id_cat_vac.Text);
				}
				if(ctrl_id_cat_vac.GetType().Equals(typeof(ComboBox)))
				{
					ComboBox cmb_id_cat_vac = (ComboBox)ctrl_id_cat_vac;
					if (cmb_id_cat_vac.SelectedIndex == -1)
					{
						r = false;
						MessageBox.Show("Falta ingresar el/la id_cat_vac","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
					}
					if (r)
						new_cat_vacacion.Id_cat_vac = Convert.ToInt32(cmb_id_cat_vac.SelectedValue);
				}
				if (txt_nombre_cat_vac.TextLength == 0)
				{
					r = false;
					MessageBox.Show("Falta ingresar el/la nombre_cat_vac","Información",MessageBoxButtons.OK,MessageBoxIcon.Stop);
				}
				if (r)
					new_cat_vacacion.Nombre_cat_vac = txt_nombre_cat_vac.Text;

				if(!r)
					new_cat_vacacion = null;
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return new_cat_vacacion;
		}

		public static void grabar_actualizar_registro(Control ctrl_id_cat_vac,TextBox txt_nombre_cat_vac)
		{
			try
			{
				cat_vacacion new_cat_vacacion =valida_campos_cat_vacacion(ctrl_id_cat_vac,txt_nombre_cat_vac); 
				if(new_cat_vacacion!=null)
					GrabarViaSql(new_cat_vacacion);
			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		public static bool grabar_actualizar_registro_personaliza(Control ctrl_id_cat_vac,TextBox txt_nombre_cat_vac)
		{
			bool r = false;
			try
			{
				cat_vacacion new_cat_vacacion =valida_campos_cat_vacacion(ctrl_id_cat_vac,txt_nombre_cat_vac); 
				if(new_cat_vacacion!=null)
				{
					r = true;
					GrabarViaSql(new_cat_vacacion);
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return r;
		}

		#endregion

	}
}
